import base64
from hashlib import md5

from Crypto.Cipher import AES
from Crypto import Random

def pad(s):
    return s + (16 - len(s) % 16) * chr(16 - len(s) % 16).encode()

def unpad(s):
    return s[0:-ord(s[len(s)-1:])]

def bytes_to_key(data, salt, output=48):
    assert len(salt) == 8, len(salt)
    data += salt
    key = md5(data).digest()
    final_key = key
    while len(final_key) < output:
        key = md5(key + data).digest()
        final_key += key
    return final_key[:output]

def encrypt(data, passphrase):
    salt = Random.new().read(8)
    key_iv = bytes_to_key(passphrase, salt, 32+16)
    key = key_iv[:32]
    iv = key_iv[32:]
    aes = AES.new(key, AES.MODE_CBC, iv)
    cipherbyte = base64.b64encode(b"Salted__" + salt + aes.encrypt(pad(data)))
    return cipherbyte

def decrypt(data, passphrase):
    data = base64.b64decode(data)
    assert data[:8] == b'Salted__'
    salt = data[8:16]
    key_iv = bytes_to_key(passphrase, salt, 32+16)
    key = key_iv[:32]
    iv = key_iv[32:]
    aes = AES.new(key, AES.MODE_CBC, iv)
    plainbyte = unpad(aes.decrypt(data[16:]))
    return plainbyte

if __name__ == '__main__':
    data = b'123456'
    passphrase = b'xxx'

    # encrypt_data = encrypt(data, passphrase)
    # print('encrypt_data:', encrypt_data)

    encrypt_data = b"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"

    decrypt_data = decrypt(encrypt_data, passphrase)
    print('decrypt_data:', decrypt_data)